package es.ats.codington.festival.servlets;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.swing.JOptionPane;
import es.ats.codington.festival.domain.Event;
import es.ats.codington.festival.domain.EventSignUp;
import es.ats.codington.festival.services.EventService;
import es.ats.codington.festival.services.EventSignUpService;


public class EventSignUpServlet extends HttpServlet {
	
	/**
	 * 
	 */
	
	private static final long serialVersionUID = 1L;
	
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		HttpSession sesion = request.getSession(false);
		
		if (sesion == null){
			RequestDispatcher requestDispatcher = request.getRequestDispatcher("/");
	        requestDispatcher.forward(request, response);
		}
	
		else{	
		
			EventSignUp esu = new EventSignUp();
			EventSignUpService ess = new EventSignUpService();
			EventService es=new EventService();
			Event ev=new Event();
		
			try {

			
				int eventId =Integer.parseInt(request.getParameter("eventid"));
				int  visitorId = (Integer) sesion.getAttribute("peopleid");
		
				esu.setIdEvent(eventId);
				esu.setIdVisitor(visitorId);	
				ev=es.getEventById(eventId);
			
				boolean regis=ess.isRegisteredToEvent(esu);
				//If the user is currently registered into the event 
				if(regis == true)
				{
					JOptionPane.showMessageDialog(null,"You are already registered on this event!");
					request.setAttribute("event",ev);
					request.setAttribute("registered",regis);
					RequestDispatcher requestDispatcher = request.getRequestDispatcher("jsp/showevent.jsp");
			        requestDispatcher.forward(request, response);
				}		
				//if the user is not register into the event yet
				else
				{
					
					int seats=ess.updateRestSeatsAvailableEvent(ev);
					int regev=ess.registerVisitorForNewEventDAO(esu);
				
					List<Event> events = new ArrayList<Event>();
					events=ess.viewEventsOfUserDAO(esu.getIdVisitor());
					request.setAttribute("allevents",events);
					request.setAttribute("eventsize",events.size());
					request.setAttribute("tittle","Upcoming events that you are signed in");
					String msg=new String();
					// if there aren't seats available for this event
					if(seats==0)
					{
						msg="Sorry, the event is full!, try another event";
					// if there is one or more seats available for this event
					}
					else
					{
						if(regev==0){
							
							msg="Sorry, you couldn't be registered. Try again";
						}
						else{
							msg="Congrats!!, you are now registered on "+ev.getName();
						}
					}
	
					JOptionPane.showMessageDialog(null,msg);	
					RequestDispatcher requestDispatcher = request.getRequestDispatcher("jsp/events.jsp");
				    requestDispatcher.forward(request, response);
				}
			}
			catch (Exception e) {
				request.setAttribute("error", "Something is wrong with your data. Please, try it again in a few minutes.");
				RequestDispatcher rd = request.getRequestDispatcher("jsp/error.jsp");
				rd.forward(request,response);
			}
		}
		
	}
		
		
		
	
	
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}
}

